package com.atguigu.gmall.weball.haha;

import sun.reflect.Reflection;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Yanxi {
    void startBiaoyan();
}

public class MyHaha implements Yanxi {

    @Override
    public void startBiaoyan() {
        System.out.println("宝强：拿了一根烟");
    }





    public static void main(String[] args) {
        MyHaha baoqiang = new MyHaha();
//        baoqiang.startBiaoyan();

        /**
         * ClassLoader loader,
         * Class<?>[] interfaces,
         * InvocationHandler h
         */
        Yanxi jjr = (Yanxi) Proxy.newProxyInstance(
                baoqiang.getClass().getClassLoader(),
                baoqiang.getClass().getInterfaces(),
                new InvocationHandler() {
                    /**
                     * 执行当前类所有方法之前都会执行invoke
                     * @param proxy   代理对象
                     * @param method  当前正在执行的方法
                     * @param args    当前方法执行用的参数
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("------------------"+method.getName());
                        System.out.println("哈哈哈");
                        //执行目标方法
                        Object invoke = method.invoke(baoqiang, args);
                        System.out.println("呵呵呵");
                        return invoke;
                    }
                });

        jjr.startBiaoyan();


    }


}
